import requests
import lxml
from bs4 import BeautifulSoup
import urllib.request
import climage
import random
import os
import time
from termcolor import cprint


#---fuck_tg by ch4se 2024---


#функция которая читает файл config.txt
def read_config():
    conf = open('config.txt','r')
    channels = conf.readlines()
    conf.close
    return channels

#функция меню выбора
def menu():
    os.system('clear')
    os.system("echo 'fuck tg' | figlet | lolcat")
    os.system("echo '                            by ch4se' | lolcat")
    #print('                    ')
    print('доступные каналы: ')
    
    config = read_config()
    config = list(map(lambda config:config.strip(),config))
    
    i = 0
    while i < len(config):
        print(str(i) + ' ==> ' + config[i])
        i = i+1
    
    print('             ')
    channel = int(input('введите номер желаемого канала: '))
    if channel > len(config):
        print('ОШИБКА: вы ввели номер канала не существующего в конфиге')
        time.sleep(2)
        menu()
    
    url = "https://tgstat.com/en/channel/@"
    valid_url = url + str(config[channel])
    
    return valid_url



#---парсинг информации о канале---


#функция, получающая аватарку канала
def get_channel_avatar():
    channel_avatar = soup.find('img', class_='img-thumbnail box-160-280 rounded-circle').get('src')
    link = 'https:' + str(channel_avatar)
    random_name = '.' + str(random.randint(0,232323232323))
    urllib.request.urlretrieve(link,random_name)
    print(climage.convert(random_name,width=23))
    os.system('rm ' + random_name)

#парсинг подписчиков, названия и постов
def subs():
    subs = soup.find('div',class_='card card-body border pt-1 pb-2').find('h2').text
    return subs

def channel_name():
    channel_name = soup.find('div',class_='card card-body border mt-2').find('h1').text
    return channel_name

def get_posts():
    get_posts = soup.find('div',class_='posts-list lm-list-container').find_all('div',class_='post-text')
    posts = [a.text for a in get_posts]
    return posts

def get_theme():
    theme = soup.find('div',class_='text-left text-sm-right').find('div',class_='mt-2').find('a').text
    return theme

def get_dates():
    get_dates = soup.find('div',id='posts-lists-container').find_all('small')
    dates = [a.text for a in get_dates]
    return dates



#---создание переменной с ссылкой на канал---

url = str(menu())

#создание объекта soup 
page_get = requests.get(url, headers = {'User-agent': 'fuck_tg'})
soup = BeautifulSoup(page_get.text,"lxml")

#вывод информации о канале
cprint(str(channel_name()).center(150),attrs=['bold'])
print('       ')
get_channel_avatar()
print('        ')
print('подписчки: ' + str(subs()))
print('тематика канала:' + str(get_theme()))
print('       ')
post_count = int(input("сколько постов хотите посмотреть?(макс.20): "))


#вывод постов
k = 0
dates_print = get_dates()
post_print = list(filter(None,get_posts()))

while k < post_count:    
        print('        ')
        print('[====' + dates_print[k] + '====]')
        print(post_print[k])
        k = k+1


print('            ')
os.system("echo 'спасибо за использование!' | lolcat")
print('            ')


